<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>10.9 Prompt Chaining（提示词链） - Langchain框架教程</title>
    <link rel="stylesheet" href="../shared_styles.css">
</head>
<body>
    <div class="container">
        <h1> 第十章：AI系统提示词设计进阶</h1>
        <section id="s10-9">
            <h2>10.9 Prompt Chaining（提示词链）</h2>
            <p>Prompt Chaining（提示词链）是一种将多个提示词或LLM调用连接起来的技术，用于完成更复杂的任务。它允许我们将一个大型任务分解成一系列更小的、可管理的步骤，每个步骤都由一个或多个LLM调用处理，并将前一个步骤的输出作为后一个步骤的输入。这与Langchain的核心理念——构建链（Chains）——紧密相关。</p>

            <h3>Prompt Chaining 的原理</h3>
            <p>单个LLM调用通常擅长完成特定的、定义明确的任务，例如回答一个问题、总结一段文本或生成一段创意写作。然而，对于需要多步推理、信息整合或顺序执行子任务的复杂场景，单个LLM调用可能不足以完成。Prompt Chaining通过以下方式解决这个问题：</p>
            <ol>
                <li><strong>任务分解：</strong> 将一个复杂任务分解成一系列逻辑上独立的子任务。</li>
                <li><strong>顺序执行：</strong> 按照预定的顺序执行这些子任务。</li>
                <li><strong>信息传递：</strong> 将前一个子任务的输出作为输入传递给下一个子任务。</li>
            </ol>
            <p>这种链式结构使得我们能够构建更强大、更灵活的AI应用，能够处理比单个LLM调用更复杂的流程。</p>

            <h3>在Langchain中实现 Prompt Chaining</h3>
            <p>Langchain的核心就是构建各种类型的链（Chains）。这些链本质上就是Prompt Chaining的实现。Langchain提供了多种内置的链类型，也允许用户自定义链。以下是一些与Prompt Chaining相关的Langchain概念和组件：</p>
            <ul>
                <li><strong>LLMChain:</strong> 最基本的链类型，将一个PromptTemplate和一个LLM连接起来。</li>
                <li><strong>SequentialChain:</strong> 用于按顺序连接多个链，将前一个链的输出作为后一个链的输入。</li>
                <li><strong>RouterChain:</strong> 根据输入动态地选择要执行的链。</li>
                <li><strong>TransformChain:</strong> 用于在链中的步骤之间进行数据转换。</li>
                <li><strong>Runnable Interface:</strong> Langchain表达式语言（LCEL）的核心，提供了一种灵活的方式来组合各种组件（包括PromptTemplates, LLMs, OutputParsers, Retrievers等）来构建链。</li>
            </ul>

            <p>以下是一个使用LCEL实现简单Prompt Chaining的示例：</p>
            <pre><code class="language-python">
# (接上一节的Qwen LLM初始化代码)
# from langchain_openai import ChatOpenAI
# from langchain_core.prompts import ChatPromptTemplate
# from langchain_core.output_parsers import StrOutputParser
# import os
#
# api_key = os.environ.get("DASHSCOPE_API_KEY")
# qwen_llm_chaining = ChatOpenAI(
#     base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
#     api_key=api_key,
#     model="qwen-plus",
#     temperature=0.1
# )

from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser

# 第一个步骤：总结文本
summarize_prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个专业的文本总结器。请用中文简洁地总结以下文本："),
    ("user", "{text}")
])
summarize_chain = summarize_prompt | qwen_llm_chaining | StrOutputParser()

# 第二个步骤：根据总结生成一个问题
question_prompt = ChatPromptTemplate.from_messages([
    ("system", "根据以下总结，提出一个相关的、有深度的问题："),
    ("user", "{summary}")
])
question_chain = question_prompt | qwen_llm_chaining | StrOutputParser()

# 将两个链连接起来形成一个顺序链
# 使用LCEL的链式操作符 |
full_chain = {"summary": summarize_chain} | question_chain

# 示例文本
text_to_process = """
Langchain是一个用于开发由语言模型驱动的应用程序的框架。
它提供了一套工具、组件和接口，简化了构建复杂LLM应用的过程。
Langchain的核心概念包括模型（Models）、提示词（Prompts）、链（Chains）、
索引（Indexes）、代理（Agents）和回调（Callbacks）。
通过组合这些组件，开发者可以创建问答系统、聊天机器人、文本生成工具等。
"""

# 调用链
print("正在执行Prompt Chaining...")
response = full_chain.invoke({"text": text_to_process})

print("\n原始文本:")
print(text_to_process)
print("\n生成的总结和问题:")
print(response)

                    </code></pre>
            <p>在这个示例中，我们首先定义了一个用于总结文本的链，然后定义了一个用于根据总结生成问题的链。最后，我们使用LCEL的链式操作符将它们连接起来，形成一个完整的流程：输入原始文本，先进行总结，然后将总结作为输入生成一个问题。</p>

            <h3>Prompt Chaining 的优势和适用场景</h3>
            <p><strong>优势：</strong></p>
            <ul>
                <li>能够处理更复杂的、需要多步处理的任务。</li>
                <li>提高了模块化和可维护性，每个链或步骤可以独立开发和测试。</li>
                <li>增强了灵活性，可以根据需求轻松地重新组合或修改链的步骤。</li>
                <li>使得构建复杂的AI工作流成为可能。</li>
            </ul>
            <p><strong>适用场景：</strong></p>
            <ul>
                <li>需要多步推理或信息处理的任务（如文档分析、数据提取和格式化）。</li>
                <li>构建复杂的对话系统或聊天机器人。</li>
                <li>自动化工作流程，其中每个步骤都涉及LLM的调用。</li>
                <li>将LLM与其他工具或API集成。</li>
            </ul>

            <h3>总结</h3>
            <p>Prompt Chaining 是构建复杂LLM应用的基础技术，它通过将多个提示词或LLM调用连接起来，使得我们能够处理更复杂的任务和工作流程。Langchain的核心设计理念就是围绕着“链”展开，提供了丰富的工具和抽象来支持Prompt Chaining的实现。通过有效地利用Langchain的链组件和LCEL，开发者可以构建出强大、灵活且模块化的AI系统。</p>
        </section>

        <div class="navigation">
            <a href="../langchain_tutorial_outline.html">返回教程目录</a>
            <a href="../chapter10/chapter10_8_retrieval_augmented_generation.html">&larr; 上一节：10.8 Retrieval Augmented Generation (RAG)（检索增强生成）</a>
            <a href="../chapter10/chapter10_10_evaluation.html">下一节：10.10 Evaluation（评估） &rarr;</a>
        </div>
    </div>
</body>
</html>
